#include<iostream>
#include<vector>

using namespace std;

int main(int argc, char** argv) {
	//1:并发、进程、线程的基本概念和综述
	//并发：
	// 	   两个或多个任务（独立的活动）同时发生（进行）：一个程序可以同时执行
	//	   多个独立的任务；
	// 	   以往计算机，单核cpu：每一个时刻只能执行一个任务，由操作系统调度
	// 	   每秒钟进行多次的任务切换，这是并发的假象（并不是真正的并发），这种切换
	// 	   需要时间开销，比如操作系统要保持切换时的状态，执行进度信息等，都需要时间
	// 	   切换回来时要复原原来的信息
	// 
	// 	   硬件发展，出现了多处理器计算机：用于服务器或高性能领域
	// 	   台式机：在一块芯片上有多个cpu（多核心）
	// 	   能够实现真正的并行执行任务（硬件并发）；
	// 	   任务数小于核数可以并行执行，否则还得切换
	// 
	// 	   目的：同时干多个事，提供性能
	// 
	//可执行程序
	//		磁盘上的一个文件，windows下的exe文件
	// 	    linux的有x后缀的文件
	//		
	//进程
	//		一个进行中的程序-》进程
	// 
	//线程
	//		每个进程都有一个主线程，这个主线程是唯一的，也就是一个进程只能有一个主线程
	// 	   当执行一个程序，产生一个进程后，主线程也就默默 的启动起来了
	// 	   运行程序时，实际上时进程的主线程在执行（调用）main中的代码
	// 	   主线程和进程同时进行
	// 	   线程：执行代码的东西
	// 	   线程可以被理解为代码的执行道路
	// 
	// 	   除了主线程之外，我们可以通过代码创建其他线程，其他线程走的别的道路，甚至去别的地方
	//	   每创建一个新线程，我们就可以在同一时刻多干一个不同的事
	// 
	//		线程不是越多越好，每个线程，都需要一个独立的堆栈空间（约1M），线程之间
	//		切换要保存很多中间状态，会耗费本该属于程序运行的时间 
	//		创建的线程最大不超过200-300个
	// 	   
	//实现并发的方法（老师讲的好像有问题，没分清并行和并发，下面是直接抄的笔记）
	// 	多个进程
	//	单独进程，多个线程（通过代码实现）
	//	
	//		并发是指一个处理器同时处理多个任务。
	//		并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
	//		并发是逻辑上的同时发生（simultaneous），而并行是物理上的同时发生。
	//		来个比喻：并发是一个人同时吃三个馒头，而并行是三个人同时吃三个馒头。
	//
	//多进程并发：
	// 	   多个程序运行
	// 	   服务器进程之间的通信
	// 	   进程之间的通信（同一个电脑上：管道，文件，消息队列，共享内存）
	// 	   不同电脑上的多个进程通信需要用socket通信技术
	//多线程并发
	//		单个进程中，创建了多个线程
	// 	    线程：类似于轻量级的进程，每个线程都有独立的运行路径，
	//		但是一个进程中所有的线程共享地址空间（内存）
	// 	    全局变量，引用，指针等可以在线程之间传递
	// 	    所以使用多线程开销远远小于多进程
	// 
	//		共享内存带来问题：数据一致性；线程a和线程b同时写入数据时怎么处理（先后问题）
	// 
	// 	   建议：多进程和多线程并发可以混合使用，但是优先考虑多线程手段
	// 
	//C++11新标准线程库
	// 	   以往：windows下	createThread（）；_beginthraed();_beginthreadexe()创建线程
	//			linux下		pthread_create();创建线程
	// 	   临界区，互斥量等不能跨平台编译
	//	   POSIX thread（pthread）可以跨平台，但是配置繁琐
	// 
	// 新标准c++11本身增加了多线程支持，可移植性增加
	// 
	// 
	//
}